import request from "@/utils/request";

const ARCHIVES_BASE_URL = "/api/v1/archivess";

const ArchivesAPI = {
  /** 获取博客文章分页数据 */
  getPage(queryParams?: ArchivesPageQuery) {
    return request<any, PageResult<ArchivesPageVO[]>>({
      url: `${ARCHIVES_BASE_URL}/page`,
      method: "get",
      params: queryParams,
    });
  },
  /**
   * 获取博客文章表单数据
   *
   * @param id 博客文章ID
   * @returns 博客文章表单数据
   */
  getFormData(id: number) {
    return request<any, ArchivesForm>({
      url: `${ARCHIVES_BASE_URL}/${id}/form`,
      method: "get",
    });
  },

  /** 添加博客文章*/
  add(data: ArchivesForm) {
    return request({
      url: `${ARCHIVES_BASE_URL}`,
      method: "post",
      data: data,
    });
  },

  /**
   * 更新博客文章
   *
   * @param id 博客文章ID
   * @param data 博客文章表单数据
   */
  update(id: number, data: ArchivesForm) {
    return request({
      url: `${ARCHIVES_BASE_URL}/${id}`,
      method: "put",
      data: data,
    });
  },

  /**
   * 批量删除博客文章，多个以英文逗号(,)分割
   *
   * @param ids 博客文章ID字符串，多个以英文逗号(,)分割
   */
  deleteByIds(ids: string) {
    return request({
      url: `${ARCHIVES_BASE_URL}/${ids}`,
      method: "delete",
    });
  },
};

export default ArchivesAPI;

/** 博客文章分页查询参数 */
export interface ArchivesPageQuery extends PageQuery {
  /** 文章类型（字典code：archives_type） */
  type?: string;
  /** 发布时间 */
  publishTime?: [string, string];
}

/** 博客文章表单对象 */
export interface ArchivesForm {
  /** 文章ID */
  id?: number;
  /** 文章标题 */
  title?: string;
  /** 封面图片 */
  image?: string;
  /** 标签列 */
  tags?: string[];
  /** 文章简介 */
  description?: string;
  /** 文章内容 */
  content?: string;
  /** 文章类型（字典code：archives_type） */
  type?: string;
  /** 发布时间 */
  publishTime?: Date;
  /** 撤回时间 */
  revokeTime?: Date;
}

/** 博客文章分页对象 */
export interface ArchivesPageVO {
  /** 文章ID */
  id?: number;
  /** 文章标题 */
  title?: string;
  /** 封面图片 */
  image?: string;
  /** 文章简介 */
  description?: string;
  /** 文章内容 */
  content?: string;
  /** 文章类型（字典code：archives_type） */
  type?: string;
  /** 标签列 */
  tags?: string[];
  /** 发布时间 */
  publishTime?: Date;
  /** 撤回时间 */
  revokeTime?: Date;
}
